////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modawbbestshotv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODAWBBESTSHOTV1_H
#define MODAWBBESTSHOTV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODAWBBESTSHOTV1_NAMESPACE_BEGIN namespace modawbbestshotv1 {
#define MODAWBBESTSHOTV1_NAMESPACE_END }

MODAWBBESTSHOTV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modBestShotV1OperationType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class modBestShotV1OperationType
{
    NoEffect          = 0,
    ManualWB          = 1,
    AWBWithGainAdjust = 2,
    AWBWithCCTRange   = 3
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modBestShotV1DataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modBestShotV1DataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Operation
    /// Default Value: NoEffect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modBestShotV1OperationType Operation;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType           data;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CCTRange
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct CCTRangeStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// start
        ///
        /// Range:         [0.0,15000.0]
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT start;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// end
        ///
        /// Range:         [0.0,15000.0]
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT end;
    } CCTRange;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAWBBestShotV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAWBBestShotV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType          moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableFlag
    ///
    /// Tuning Level:  must_tune
    /// Description:   module enable flag
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::enableFlagType        enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ConvSpeed
    ///
    /// Default Value: 0.2
    /// Range:         [0.0,1.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                 ConvSpeed;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// BestShotData - Array
    /// Length:        25
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modBestShotV1DataType BestShotData[25];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAWBBestShotV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixAWBBestShotV1TypeClass : public ParameterModule, public chromatixAWBBestShotV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAWBBestShotV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAWBBestShotV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixAWBBestShotV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modBestShotV1DataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodBestShotV1DataType(
        ParameterFileSymbolTableEntry* entry,
        modBestShotV1DataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modBestShotV1DataType_CCTRangeStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodBestShotV1DataType_CCTRangeStruct(
        ParameterFileSymbolTableEntry* entry,
        modBestShotV1DataType::CCTRangeStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAWBBestShotV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAWBBestShotV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixAWBBestShotV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAWBBestShotV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixAWBBestShotV1TypeClass

MODAWBBESTSHOTV1_NAMESPACE_END
#endif // MODAWBBESTSHOTV1_H

